package test;
import org.junit.Test;
import model.Account;
import model.Bank;
import model.Person;
import model.SpendingAccount;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class TestBank {
private Bank bank;
private HashMap<Person, ArrayList<Account>> content;
public TestBank() {
bank = Bank.getInstance();
content = bank.getBankContent();
}
@Test
public void testAddPerson() {
Person person = new Person("Alexander", "Riback", "AAlex", "root", 20, 0);
if (!content.containsKey(person)) {
int nr = content.size();
content.put(person, null);
assertEquals(nr + 1, content.size(), 0.0);
}
}
@Test
public void testRemovePerson() {
Iterator<Person> it = content.keySet().iterator();
Person person = it.next();
if (content.containsKey(person)) {
int nr = content.size();
content.remove(person);
assertEquals(nr - 1, content.size(), 0.0);
}
}
@Test
public void testAddHolderAssociatedAccount() {
Iterator<Person> it = content.keySet().iterator();
Person person = it.next();
Account account = new SpendingAccount(3000);
if (content.containsKey(person)) {
int nrAccounts;
if (content.get(person) == null) {
nrAccounts = 0;
ArrayList<Account> accounts = new ArrayList<>();
accounts.add(account);
content.remove(person);
person.setNrOfAccounts(person.getNrOfAccounts() + 1);
content.put(person, accounts);
} else {
ArrayList<Account> accounts = new ArrayList<>();
accounts.addAll(content.get(person));
nrAccounts = accounts.size();
accounts.add(account);
content.remove(person);
person.setNrOfAccounts(person.getNrOfAccounts() + 1);
content.put(person, accounts);
}
assertEquals(nrAccounts + 1, person.getNrOfAccounts(), 0.0);
}
}
@Test
public void testRemoveHolderAssociatedAccount() {
Iterator<Person> it = content.keySet().iterator();
Person person = it.next();
Account account = content.get(person).get(0);
if (content.containsKey(person)) {
if (person.getNrOfAccounts() > 0) {
int nrAccounts;
ArrayList<Account> accounts = content.get(person);
nrAccounts = accounts.size();
if (accounts.contains(account)) {
content.remove(person);
person.setNrOfAccounts(person.getNrOfAccounts() - 1);
accounts.remove(account);
content.put(person, accounts);
assertEquals(nrAccounts - 1, accounts.size(), 0.0);
}
}
}
}
@Test
public void testGetAllPersons() {
Set<Person> persons = content.keySet();
ArrayList<Object> pers = new ArrayList<>();
for (Person person : persons) {
pers.add(person);
}
assertEquals(pers.size(), content.size(), 0.0);
}
}